package com.xunfang.cloud.common.api;

import com.xunfang.cloud.common.enties.Pay;
import com.xunfang.cloud.common.enties.PayDTO;
import com.xunfang.cloud.common.result.ResultData;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 *  api 模块
 *    调用服务提供者的接口
 *
 *  openfeign 为什么写接口就可以调用 xxx-service?
 *      原理
 *      01 注解 @EnableFeignClients 里面有 @Import(FeignClientsRegistrar.class) ==> FeignClientsRegistrar
 *         这里把 @FeignClient 标记的接口 添加到ioc容器中
 *
 *      02 这个PayFeignApi 接口会生成代理类
 *         proxyPayFeignApi.addPay() 方法
 *         addPay() 这个中 会进行 反射操作
 *                httpTemplate 发送请求  xxx-service 解析返回结果
 *
 *         proxyPayFeignApi.addPay() 拿到结构返回
 *
 *   mybatis
 *     01
 *     02 proxyPayMapper.addPay()
 *          有Connection、Ps 操作sql 执行 返回结果
 */
@FeignClient("cloud-payment-service") // 指明服务端的服务名
public interface PayFeignApi{
    /**
     * 新增一条支付相关流水记录
     * @return
     */
    @PostMapping("/pay/add")
    public String addPay(@RequestBody Pay pay);

    /**
     * 按照主键记录查询支付流水信息
     * @param id
     * @return
     */
    @GetMapping("/pay/get/{id}")
    public Pay  getPayInfo(@PathVariable("id") Integer id);
    // public Pay  getPayInfo(@PathVariable Integer id); // 这样写是错误的，必须指明路径参数名称

    @DeleteMapping(value = "/pay/del/{id}")
    public Integer deletePay(@PathVariable("id") Integer id);

    /**
     * openfeign天然支持负载均衡演示
     * @return
     */
    @GetMapping("/pay/test/lb")
    public String getLb();

    /**
     * 测试服务降级
     * @param id
     * @return
     */
    @GetMapping(value = "/pay/circuit/{id}")
    public String myCircuit(@PathVariable("id") Integer id);

}